package old.gjp.dao;

import old.gjp.domain.ZhangWu;
import old.gjp.tools.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

/**
 * @author DingZhenYun
 * @create 2019-03-22 11:00
 */
/*
 *  实现对数据表 gjp_zhangwu 数据增删改查操作
 *  dbuils工具类完成,类成员创建QueryRunner对象,指定数据源
 */
public class ZhangWuDao  {
    private QueryRunner queryRunner=new QueryRunner(JDBCUtils.getDataSource());

    public ZhangWuDao() throws Exception {

    }
    /*
     * 定义方法，实现编辑功能
     * 由业务层调用，传递ZhangWu对象
     * 将对象中的数据，更新到数据表
     */
    public  void editZhangWu(ZhangWu zw){
        try {
            String sql = "UPDATE gjp_zhangwu SET flname=?,money=?,zhanghu=?,createtime=?,description=? WHERE zwid=?";
            Object [] params={zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()};
            queryRunner.update(sql,params);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /*
     * 定义方法，实现添加账务功能
     * 由业务层调用，传递ZhangWu对象
     * 将ZhangWu对象中的数据，添加到数据库
     */
    public void addZhangWu(ZhangWu zw){
        try {
            String sql="insert into gjp_zhangwu(flname,money,zhanghu,createtime,description) values(?,?,?,?,?)";
            Object [] param={zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription()};
            queryRunner.update(sql,param);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /*
     * 定义方法,查询数据库,带有条件去查询账务表
     * 由业务层调用,查询结果集存储到Bean对象,存储到List集合
     * 调用者传递2个日期字符串
     */
    public List<ZhangWu> select(String startDate,String endDate){
        String sql="select * from gjp_zhangwu where createtime between ? and ?;";
        List<ZhangWu> list= null;
        try {
            Object []param={startDate,endDate};
            list = queryRunner.query(sql,new BeanListHandler<>(ZhangWu.class),param);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
    /*
     * 定义方法,实现条件查询账务
     * 方法由试图层调用,传递两个日期的字符串
     * 调用service层的方法,传递两个日期字符串,获取结果集
     * 结果集返回给试图
     */
    public List<ZhangWu> selectAll(){
        String sql="SELECT * FROM gjp_zhangwu;";
        try {
            List<ZhangWu> list=queryRunner.query(sql,new BeanListHandler<>(ZhangWu.class));
            return list;
        } catch (SQLException e) {
            System.out.println(e);
            throw new RuntimeException("查询所有失败");
        }
    }
    /*
     * 定义方法，实现删除业务
     * 业务层调用，传递主键id
     */
    public void deleteZhangWu(int zwid) {
        String sql="delete from gjp_zhangwu where zwid=?";
        try {
            queryRunner.update(sql,zwid);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
